Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>YMODEM</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/YMODEM"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-YMODEM rootpage-YMODEM skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">YMODEM</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent" style="width:26em;"><caption class="infobox-title summary">YMODEM</caption><tbody><tr><td colspan="2" class="infobox-subheader"><a href="Communication_protocol" title="Communication protocol">Communication protocol</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Purpose</th><td class="infobox-data"><a href="File_transfer" title="File transfer">file transfer protocol</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Developer(s)</th><td class="infobox-data"><a href="Chuck_Forsberg" title="Chuck Forsberg">Chuck Forsberg</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Introduction</th><td class="infobox-data">1985<span style="display:none">&nbsp;(<span class="bday dtstart published updated">1985</span>)</span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Based on</th><td class="infobox-data"><a href="XMODEM" title="XMODEM">XMODEM</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Influenced</th><td class="infobox-data"><a href="ZMODEM" title="ZMODEM">ZMODEM</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap; width:25%;">Hardware</th><td class="infobox-data"><a href="Modem" title="Modem">modems</a></td></tr></tbody></table>
<p><b>YMODEM</b> is a <a href="Protocol_for_file_transfer" class="mw-redirect" title="Protocol for file transfer">file transfer protocol</a> used between <a href="Microcomputer" title="Microcomputer">microcomputers</a> connected together using <a href="Modem" title="Modem">modems</a>. It was primarily used to transfer files to and from <a href="Bulletin_board_system" title="Bulletin board system">bulletin board systems</a>. YMODEM was developed by <a href="Chuck_Forsberg" title="Chuck Forsberg">Chuck Forsberg</a> as an expansion of <a href="XMODEM" title="XMODEM">XMODEM</a> and was first implemented in his <a href="CP/M" title="CP/M">CP/M</a> <b>YAM</b> program. Initially also known as YAM, it was formally given the name "YMODEM" in 1985 by <a href="Ward_Christensen" title="Ward Christensen">Ward Christensen</a>, author of the original XMODEM.
</p><p>YMODEM extended XMODEM in three ways, combining features found in other extended XMODEM varieties. Like XMODEM-CRC, YMODEM replaced the 8-bit <a href="Checksum" title="Checksum">checksum</a> with a 16-bit <a href="Cyclic_redundancy_check" title="Cyclic redundancy check">cyclic redundancy check</a> (CRC), but made it the default form of correction instead of optional. From TeLink it added the "block 0" header that sent the filename and size, which allowed batch transfers (multiple files in a single session) and eliminated the need to add <a href="Data_padding" class="mw-redirect" title="Data padding">padding</a> at the end of the file. Finally, YMODEM allowed the block size to be increased from the original 128 bytes of data to 1024, as in <a href="XMODEM#XMODEM-1K" title="XMODEM">XMODEM-1k</a>, which greatly improved throughput on faster modems.
</p><p>Forsberg built the standard with all of these features as runtime options, allowing a single protocol driver to fall back to XMODEM-CRC or even XMODEM when connecting to non-YAM systems. He believed that programmers would want to implement as many of these features as possible on any given platform. He was dismayed to find that the majority of implementations were actually providing nothing more than 1k block size with CRC-16, failing to implement the "block 0" while continuing to use the YMODEM name. The result was the release of many mutually incompatible YMODEM implementations, and the use of the name <b>YMODEM Batch</b> to clearly indicate those versions that did support the complete standard.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Features">Features</h2></div>
<div class="mw-heading mw-heading3"><h3 id="XMODEM">XMODEM</h3></div>
<p>The original <a href="XMODEM" title="XMODEM">XMODEM</a> was a very simple protocol and that is the reason for its success; it could be implemented on practically any machine of the era, even those with very limited processors and storage. It worked by breaking up the data to be sent into 128-byte <a href="Network_packet" title="Network packet">packets</a>, adding a 3-byte header and 1-byte <a href="Checksum" title="Checksum">checksum</a> footer, and sending the resulting 132-byte packets out in order. The receiving computer recalculated the checksum from the 128 bytes of data, and if it matched the checksum sent in the footer it sent back an <style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */


.mw-parser-output .monospaced{font-family:monospace,monospace}


/* end https://en.wikipedia.org/ */
</style><span class="monospaced">ACK</span>, and if it did not match, a <span class="monospaced">NAK</span>. When the sender received an <span class="monospaced">ACK</span> it sent the next packet, while a <span class="monospaced">NAK</span> caused it to re-send the last one.
</p><p>There were a number of problems with the protocol. The use of a simple checksum meant some common errors could go unnoticed. The small packet size and requirement to wait for the <span class="monospaced">ACK</span> or <span class="monospaced">NAK</span> led to slow performance on higher speed links or ones with significant latency. Finally, as the transfer contained no details of the file, every file had to be manually started, which could be a chore when many small files were being transferred.
</p><p>Solutions to these problems were developed during the early 1980s. XMODEM-CRC replaced the checksum with a 16-bit <a href="Cyclic_redundancy_check" title="Cyclic redundancy check">cyclic redundancy check</a> (CRC), which was much more resistant to common errors. XMODEM-1k expanded the packet size from 128 bytes to 1024, improving performance on higher-speed connections, while others, like WXMODEM and SEAlink instead introduced <a href="Sliding_window" class="mw-redirect" title="Sliding window">sliding window</a> systems to combat both performance and latency, at the cost of some complexity. Still others, like TeLink and MODEM7, added file information so that a single transfer could contain multiple files, allowing batches of files to be sent with a single command.
</p>
<div class="mw-heading mw-heading3"><h3 id="YMODEM">YMODEM</h3></div>
<p><a href="Chuck_Forsberg" title="Chuck Forsberg">Chuck Forsberg</a>, author of the <a href="CP/M" title="CP/M">CP/M</a> "Yet Another Modem program", or YAM, decided to write a single protocol driver that supported many features compared to XMODEM and called it YMODEM. When the users started a transfer they could indicate which options they wanted on the command line, for instance, saying they wished to use CRC. The protocol was written so that it would attempt this style, but gracefully fall-back to match whatever capabilities the remote software did implement.
</p>
<div class="mw-heading mw-heading4"><h4 id="Abort">Abort</h4></div>
<p>One problem with the original XMODEM was that there was no defined way to abort the transfer once started. The normal solution was to send <span class="monospaced">NAK</span>s to every subsequent packet if the user requested it. Since the XMODEM protocol defined a limit of ten <span class="monospaced">NAK</span>s to abort a send, and each packet might take a second to send, this meant there was a ten second delay where the sender continually sent data that was simply ignored.
</p><p>Some implementations had added the ability to send a <span class="monospaced">CAN</span> instead of <span class="monospaced">ACK</span> or <span class="monospaced">NAK</span> at the end of a received packet to indicate an abort. Unfortunately, there was the possibility that a <span class="monospaced">CAN</span> could be generated by line noise and trigger an abort. YAM thus modified this slightly to require two <span class="monospaced">CAN</span>s back-to-back, which would immediately perform a "graceful abort" on the sender end.
</p>
<div class="mw-heading mw-heading4"><h4 id="CRC">CRC</h4></div>
<p>CRC support had been introduced in XMODEM-CRC. This was a very simple change to the original protocol; if requested, the receiver would attempt to trigger the transfer by sending an initial <span class="monospaced">C</span> instead of a <span class="monospaced">NAK</span>. If the remote sender supported the CRC option, it would begin sending packets as normal, but with a 16-bit CRC in the footer rather than the 1-byte checksum. YAM supported this option with no changes.
</p>
<div class="mw-heading mw-heading4"><h4 id="1k">1k</h4></div>
<p>1024-byte packets had been introduced in XMODEM-1k.<sup id="cite_ref-meeks198902_1-0" class="reference"><a href="#cite_note-meeks198902-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> This version did not change the trigger character from the receiver, so there was no way for the sender to know whether the receiver supported larger packets. Instead, XMODEM-1k was presented as a separate protocol on both ends of the connection. When such a connection was started, the sender could choose to send either 1024 bytes in a packet or 128, indicating the larger with an <span class="monospaced">STX</span> character in the header rather than the normal <span class="monospaced">SOH</span>. Normally only the last few packets would use the smaller packets, to avoid sending large amounts of padding. 1k also assumed CRC for all connections. YAM supported 1k with no changes.
</p>
<div class="mw-heading mw-heading4"><h4 id="Zero_packet">Zero packet</h4></div>
<p>In order to support automated transfers of <a href="FidoNet" title="FidoNet">FidoNet</a> mail, MODEM7 introduced the ability to send the filename as plain text before sending the first block of data. This was not reliable, and TeLink improved this by placing the filename, and optionally other data like the creation date and file length, in a complete 128-byte packet. XMODEM started transfers with packet number one, so TeLink sent this packet as number zero. This "zero packet" or "block zero" became common in other FidoNet systems like SEAlink and others.
</p><p>YAM supported the zero packet format, but it was ignored by many 3rd party implementations of YMODEM. When one implementation attempted to send the zero packet to a non-aware version, the receiver would naturally <span class="monospaced">NAK</span> the packet, as packet zero is illegal. The sender would then see the <span class="monospaced">NAK</span> as a transmission error and try to send the packet again, attempting this ten times before failing.
</p><p>For reasons that are not entirely clear, many implementations of YMODEM did not implement this feature. Because they were unaware of it, they sent a <span class="monospaced">NAK</span>, triggering a series of resend attempts before failing out. This meant that if the user chose to use a compliant YMODEM with a non-compliant version, the transfers would fail. Nevertheless, such non-compliant versions were common.
</p><p>As a result, it was common to see both YMODEM and YMODEM Batch listed as two separate protocols. Further confusion was created by the similarity between XMODEM-1k and these non-compliant YMODEMs, which were similar to the point that they were often incorrectly listed as the same.
</p>
<div class="mw-heading mw-heading2"><h2 id="Streaming_support">Streaming support</h2></div>
<p><b>YMODEM-G</b> is a streaming variant used for error-free connections. It does not wait for an <a href="Acknowledge_character" class="mw-redirect" title="Acknowledge character">ACK</a> to be received before sending the next packet; <a href="XON/XOFF" class="mw-redirect" title="XON/XOFF">XON/XOFF</a> is used for <a href="Flow_control_(data)" title="Flow control (data)">flow control</a>. The protocol is faster than YMODEM because no <a href="Latency_(engineering)" title="Latency (engineering)">latency</a> is introduced between packets, but has no capability for correcting errors. It is reliant on the underlying connection being error-free,<sup id="cite_ref-meeks198902_1-1" class="reference"><a href="#cite_note-meeks198902-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> which is the case for modems supporting <a href="Microcom_Networking_Protocol" title="Microcom Networking Protocol">MNP</a> for instance.
</p><p>Normally, a YMODEM transfer would be started by the receiver sending a <span class="monospaced">C</span> to indicate it wants to use the 128-byte format with CRC, or <span class="monospaced">NAK</span> if it wishes to use the original checksum system. When g-protocol is desired, the transfer is instead triggered by sending a <span class="monospaced">G</span>. If the sender does not support the g-protocol, it considers this to be an error and ignores it, but if it does support g it begins sending packets in a continual stream. It only expects a single <span class="monospaced">ACK</span> after the final packet is received, which is indicated by the presence of an <span class="monospaced">EOT</span> character in the data. YMODEM-g assumes 1k packets are available.
</p><p>However, despite this protocol potentially being faster than <a href="ZMODEM" title="ZMODEM">ZMODEM</a> it was still rarely used. This was partially due to the lack of other functionality, but also a more serious issue. Before the emergence of the <a href="16550_UART" title="16550 UART">16550 UART</a>, there was a substantial risk of <a href="Buffer_overflow" title="Buffer overflow">buffer overrun</a> on the <a href="Serial_port" title="Serial port">serial port</a>. Although this would be detected by YMODEM-g it could not be corrected since no block re-transmission is possible. The receiver would have to cancel and restart the whole transmission from the beginning. <a href="ZMODEM" title="ZMODEM">ZMODEM</a> on the other hand has transfer resume capability which made it more appealing.
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-meeks198902-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-meeks198902_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-meeks198902_1-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFMeeks1989" class="citation magazine cs1">Meeks, Brock (February 1989). <a rel="nofollow" class="external text" href="https://archive.org/details/eu_BYTE-1989-02_OCR/page/n217/mode/2up?view=theater">"The ABCs of X-, Y-, and ZMODEM"</a>. <i>BYTE</i>. pp.&nbsp;<span class="nowrap">163–</span>166<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-10-08</span></span>.</cite></span>
</li>
</ol></div></div>
<ul><li><a rel="nofollow" class="external text" href="http://textfiles.com/programming/ymodem.txt">XMODEM / YMODEM Protocol Reference by Chuck Forsberg</a>, October 10, 1985</li>
<li><a rel="nofollow" class="external text" href="http://pauillac.inria.fr/~doligez/zmodem/ymodem.txt">XMODEM / YMODEM Protocol Reference by Chuck Forsberg</a>, June 18, 1988 (document reformatted October 14, 1988) <a rel="nofollow" class="external text" href="https://web.archive.org/web/20121110151951/http://www.techfest.com/hardware/modem/xymodem.htm">(HTML version with text issues)</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Modem_file_transfer_protocols160" style="padding:3px"><table class="nowraplinks mw-collapsible expanded navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Modem_file_transfer_protocols160" style="font-size:114%;margin:0 4em"><a href="Modem" title="Modem">Modem</a> <a href="File_transfer" title="File transfer">file transfer</a> <a href="Communication_protocol" title="Communication protocol">protocols</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="BiModem" title="BiModem">BiModem</a></li>
<li><a href="BLAST_(protocol)" title="BLAST (protocol)">BLAST</a></li>
<li><a href="B_protocol" title="B protocol">B protocol</a></li>
<li><a href="HS/Link" title="HS/Link">HS/Link</a></li>
<li><a href="JMODEM" title="JMODEM">JMODEM</a></li>
<li><a href="Kermit_(protocol)" title="Kermit (protocol)">Kermit</a></li>
<li><a href="SMODEM" title="SMODEM">SMODEM</a></li>
<li><a href="UUCP#g-protocol" title="UUCP">UUCP-g</a></li>
<li><a href="XMODEM" title="XMODEM">XMODEM</a></li>

<li><a href="ZMODEM" title="ZMODEM">ZMODEM</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div><a href="Comparison_of_file_transfer_protocols#Serial_protocols" title="Comparison of file transfer protocols">Comparison of file transfer protocols</a></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-10-08" href="https://en.wikipedia.org/wiki/?title=YMODEM&amp;oldid=1250153451">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>